#!/usr/bin/python
# -*-coding:UTF-8 -*-

# ========================
# @Time  : 2021/2/7
# @Author: Sunny
# ========================

"""
类里面的私有属性:声明这个属性仅限类内部使用，外部不要去引用(如果私有属性仅限修改，引用后果自负)

_开头：在类外面可以直接访问
__开头：在类外面可以间接访问,不能直接访问


私有方法：可以访问但是不要去访问

在大量创建对象的情况下，封装成静态方法比封装成实例方法要节约内存
"""

class MyTest():
    attr=100
    _attr =100
    __attr =200

    def __func(self):
        print('私有方法')

    def _func(self):
        print('_func')

    def __init__(self,name):
        self.name = name

    @classmethod
    def func(cls):
        """
        方法内部：需要引用类属性或者是类方法，内部的逻辑只和类有关，和具体的某一个对象是没有关联的
        类方法里面无法操作实例对象和实例属性
        :return:
        """
        print(f'attr的属性{cls.attr}')


    @staticmethod
    def func1():
        """
        方法内部封装的代码：通常不会涉及到类，也不会涉及到具体的实例对象
        纯粹的功能代码，不会受到内部的任何影响
        :return:
        """

    #例如这个方法的内部逻辑代码，跟类本身和实例对象没有任何关系，也没有引用到类属性和实例属性
    #里面的代码逻辑不会受到类相关的任何影响，它就是一个纯粹的功能
    @staticmethod
    def random_phone():
        """生成一个手机号码"""
        phone = '131'
        for i in range(9):
            phone += str(1)
        return phone

    def fun3(self):
        """
        实例方法内部：封装和实例对象相关的操作，方法内部通常会涉及到实例对象的属性或方法的引用
        :return:
        """
        print(f'我的名字是：{self.name}')



print(MyTest.attr)

#私有属性不管能不能访问，都不要去访问
print(MyTest._attr)
print(MyTest._MyTest__attr)



# #私有方法也是一样，都不要去访问
# m = MyTest()
# #该私有方法可以调用
# m._func()
# #该私有方法不可以调用
# m.__func()






